package com.doitedu.day03.funcs

import com.doitedu.day02.beans.User
import com.doitedu.day03.Student

import scala.collection.{breakOut, immutable}

/**
 * @Date 22.6.22
 * @Created by HANGGE
 * @Description
 *
 * 1 size  length
 * 2  isEmpy  nonEmpy
 * 3  min  max  minBy maxBy
 * 4  contains  是否包含某个元素   是否包含大于4的元素
 * 5  count(f:A => Boolean)  统计符合条件的元素的个数
 * 6  filter(f:A=> Boolean)
 *  f:A=>Boolean   可以使用  &&  ||  !
 */
object _01集合方法 {
  def main(args: Array[String]): Unit = {
    val arr = Array(1, 2, 3, 4, "java", "sql", "hive")
    val ls = List(1, 2, 3, 4, 5, 6, 7)
    val mp = Map[String, Int]("zss" -> 23, ("lss", 33))
    val st = Set(1, 2, 3, 4, 5, 6)
    // 1 集合的长度   size通用   Set和Map没有length方法
    arr.length;
    arr.size
    ls.length;
    ls.size
    mp.size
    st.size
    "hello".length
    "hello".size
    // 2 判断集合是否是null  判断集合是否为空集合
    if (arr != null && arr.size > 0) { // 有元素
      // 处理元素
    } else {
      // 不用处理元素
    }

    if (arr != null && !arr.isEmpty) {

    } else {

    }

    if (arr != null && arr.nonEmpty) {

    } else {

    }
    /**
     * 在 Iterator中统一操作API
     * 父类或者是接口可以统一方法规范  方法功能
     * 所有的子类都具有一样的方法  使用各个子类的方式一样的
     */
    val iterator: Iterator[Int] = ls.toIterator
    iterator.isEmpty
    iterator.nonEmpty
    ls.isEmpty
    ls.nonEmpty
    mp.isEmpty
    mp.nonEmpty
    st.isEmpty
    st.nonEmpty

    //println(ls.contains(3))
    // count(p: A => Boolean): Int
    // e=>e>3  判断集合中的每个元素是否大于3
    val cnt = ls.count(e => e > 3) // 统计大于3的元素的个数
    println(s"符合要求的元素的个数是: $cnt")
    if (ls.count(_ > 4) > 0) {
      println("有大于四的元素")
    }

    /*  val res = for (e <- ls if e > 8) yield e
      if (res.nonEmpty){
        println("有大于四的元素")
      }*/

    val students = List[Student](
      Student(1, "leige", 27),
      Student(2, "haoge", 24),
      Student(3, "yongge", 29),
      Student(4, "qiange", 27)
    )
    // students.count(stu =>stu.age > 25 )
    //TODO 年龄大于25岁的人数
    val stuCnt = students.count(_.age > 25)
    //TODO  年龄大于25岁的学生信息
    val students1 = for (elem <- students if elem.age > 25) yield elem
    students1.foreach(println)
    println("===============================")
    // 依次判断集合中的每个元素 是否符合条件要求  将符合的元素 收集到新的结果集合中
    val stus = students.filter(_.age > 25)
   // students.filter(stu=> !stu.name.startsWith("x"))
    println(stus.toList)
    // TODO 年龄大于25岁且id < 4 的学息
    val stus2 = students
      .filter(stu => stu.age > 25 && stu.id < 4)
    println(stus2.toList)

    //.filter(_.age>25 && _.id <4)

    /*
    TODO 年龄大于25岁且id < 4 的学生信息
    val stus2 = students
        .filter(_.age>25)
        .filter(_.id<4)
      println(stus2.toList)*/


    /*   val stus =  students.map(stu =>{
          if (stu.age>25){
            stu
          }
        })
       stus.foreach(println)*/


  }

}
